#include "acolitoevento.h"

AcolitoEvento::AcolitoEvento(QObject *parent) :
    QObject(parent)
{
}

void AcolitoEvento::nuevoEvento(QStringList datosEvento)
{
    emit solicitarEstado(false);

    QString scriptGeneral;
    QStringList scriptsCreacion;
    QFile script(":/scripts/iconos/scriptNuevoEvento.sql");
    script.open(QFile::ReadOnly);
    QTextStream stream(&script);

    if(QSqlDatabase::contains("evento"))
    {
        QSqlDatabase::database("evento",false).close();;
        QSqlDatabase::removeDatabase("evento");
    }

    scriptGeneral=stream.readAll();
    script.close();
    scriptsCreacion=scriptGeneral.split("-- END",QString::SkipEmptyParts);
    scriptsCreacion.removeLast();


    {

    QSqlDatabase::addDatabase("QSQLITE","evento");
    QSqlDatabase::database("evento",false).setDatabaseName(datosEvento.at(1));

    QSqlQuery query(QSqlDatabase::database("evento"));
    QStringList::iterator it;

    for(it=scriptsCreacion.begin();it!=scriptsCreacion.end();it++)
    {
        query.prepare(*it);

        if(!query.exec())
            QMessageBox::warning(0,"ERROR",query.lastError().text());

        query.clear();

    }
    query.clear();
    query.prepare("INSERT INTO Evento(nombreEvento,inicio,fin)"
                  "VALUES(?,?,?)");

    query.addBindValue(datosEvento.at(0));
    query.addBindValue(datosEvento.at(2));
    query.addBindValue(datosEvento.at(3));
    if(!query.exec())
        QMessageBox::warning(0,"ERROR",query.lastError().text());

    }
    QSqlDatabase::database("evento",false).close();
    abreEvento(datosEvento);
}

void AcolitoEvento::abreEvento(QStringList datosEvento)
{
    if(QSqlDatabase::contains("evento"))
    {
        QSqlDatabase::database("evento",false).close();
        QSqlDatabase::removeDatabase("evento");
    }

    QSqlDatabase::addDatabase("QSQLITE","evento").setDatabaseName(datosEvento.at(1));

    {
    QSqlQuery query(QSqlDatabase::database("evento",true));

    query.exec("SELECT nombreEvento,inicio,fin FROM evento");

    query.first();

    emit this->cambiarNombre(query.value(0).toString().prepend("AcolitoLite - "));
    emit this->eventoAbierto(QPair<QString,QString>(query.value(0).toString(),datosEvento.at(1)));
    }
    emit this->solicitarEstado(true);
}

void AcolitoEvento::abreEvento(QString nombreArchivo)
{
    if(QSqlDatabase::contains("evento"))
    {
        QSqlDatabase::database("evento",false);
        QSqlDatabase::removeDatabase("evento");
    }

    QSqlDatabase::addDatabase("QSQLITE","evento").setDatabaseName(nombreArchivo);

    {
    QSqlQuery query(QSqlDatabase::database("evento",true));

    query.exec("SELECT nombreEvento,inicio,fin FROM evento");

    query.first();

    emit this->cambiarNombre(query.value(0).toString().prepend("Acolito - "));
    emit this->solicitarEstado(true);
    emit this->eventoAbierto(QPair<QString,QString>(query.value(0).toString(),nombreArchivo));
    }
}

void AcolitoEvento::solicitaNuevoEvento()
{
    nuevoEventoDialog *dialogo=new nuevoEventoDialog(qobject_cast<QWidget*>(this->parent()));

    connect(dialogo,SIGNAL(nuevoEvento(QStringList)),this,SLOT(nuevoEvento(QStringList)));

    dialogo->exec();

    delete dialogo;
}

void AcolitoEvento::solicitaAbrirEvento()
{
    QString archivo=QFileDialog::getOpenFileName(qobject_cast<QWidget*>(this->parent()),"Abrir evento",QString(),"Eventos (*.gfb)");

    if(!archivo.isEmpty() || !archivo.isNull())
        this->abreEvento(archivo);
}
